// 将一维编平对象数组转为树形结果
export function arrToTree(arr, idKey, pidKey, rootId = 0) {
  return arr.filter(item => item[pidKey] === rootId).map(item => ({...item, children: arrToTree(arr, item[idKey])}))
}

// 将tree对象数组转换为一维扁平对象数组
export function arrTreeToArr(arrTree, childName = 'children') {
  return arrTree.reduce((prev, curt) => {
    const childs = curt[childName]?.length ? arrTreeToArr(curt[childName]) : [] // 有子节点的话把子节点作为一级节点递归遍历
    return [...prev, curt, ...childs]
  }, [])
}

// 手机号正则表达式验证
export function regexPhone(str) {
  const regex = /^1[3456789]\d{9}$/
  return regex.test(str)
}

// 电子邮箱正则表达式验证
export function regexMail(str) {
  const regex = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/
  return regex.test(str)
}

// 身份证正则表达式验证
export function regexIdCard(str) {
  const regex = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X|x)$/
  return regex.test(str)
}

// 密码正则表达式验证
export function regexPassword(str) {
  const regex = /^(?=.*\d)(?=.*[a-zA-Z])(?=.*[^\da-zA-Z\s]).{8,20}$/
  return regex.test(str)
}

// 登录账号正则表达式验证
export function regexAccount(str) {
  const regex = /^[a-zA-Z0-9]{4,16}$/
  return regex.test(str)
}

// 图片上传前验证
export function imgBeforeUpload(file) {
  if (file.type !== 'image/jpeg' && file.type !== 'image/png') {
    ElMessage.warning('图片必须是JPG/PNG格式!')
    return false
  }
  if (file.size / 1024 / 1024 > 1) {
    ElMessage.warning('图片大小不能超过 1MB!')
    return false
  }
  return true
}